class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        //O(N)
        if(nums.size()<3)
            if(nums.size()==2&&nums[0]<nums[1])
                return 1;
            else
                return 0;
        for(int i=2;i<nums.size();i++){
            if(nums[i-1]>nums[i-2]&&nums[i-1]>nums[i])
                return i-1;
        }
        return nums.back()>nums[nums.size()-2]?nums.size()-1:0;
    }
};
class Solution {
public:
    int findPeakElement(vector<int>& nums) {
        int l=0,r=nums.size()-1;
        // 二分 中点可能落在顶,下坡,上坡 
        //爬山 往上坡走一定能到峰值,往下坡走不一定
        while(l<r){
            int mid=(l+r+1)>>1;
            if(nums[mid]>=nums[mid-1])
                l=mid;
            else
                r=mid-1;
        }
        return l;
    }
};